package Buildings.dwelling.hotel;
import Buildings.dwelling.*;
import Interfaces.*;

public class HotelFloor extends DwellingFloor{
    public static final int DEFAULT_STARS=1;
    private int star;
    public int getHowMuchStarInFloor(){
        return star;
    }
    public void setStarToFloor(int newstar){
        star=newstar;
    }
    @Override
    public String toString(){
        StringBuilder s=new StringBuilder();
        s.append((" этаж (отельный) звезд: "+star+" \n"));
        for(int i=0;i<getHowMuchSpaceInFloor();i++){
            s.append((getSpaceInFloor(i).toString()));
        }
        s.append("\n");
        return s.toString();
    }
    @Override
    public boolean equals(Object o){
        boolean answer=false;
        if(o.getClass()==this.getClass()){
            if(((HotelFloor)o).getHowMuchSpaceInFloor()==this.getHowMuchSpaceInFloor() &&((HotelFloor)o).getHowMuchStarInFloor()==this.getHowMuchStarInFloor()){
                boolean key=true;
                for(int j=0;j<getHowMuchSpaceInFloor();j++){
                    if(getSpaceInFloor(j).equals(((HotelFloor)o).getSpaceInFloor(j))==false){
                        key=false;
                        break;
                    }
                }
                if(key==true)answer=true;
            }
        }
        return answer;
    }
    @Override
    public int hashCode(){
        int hash;
        hash=(int)(Integer.bitCount(this.getHowMuchSpaceInFloor()) ^ star);
        for(int i=0;i<this.getHowMuchSpaceInFloor();i++){
            hash=(int)(hash ^ this.getSpaceInFloor(i).hashCode());
        }
        return hash;
    }
    @Override
    public Object clone(){
        Space []forClone=new Space[getHowMuchSpaceInFloor()];
        for(int i=0;i<getHowMuchSpaceInFloor();i++){
            forClone[i]=(Space)getSpaceInFloor(i).clone();
        }
        return new HotelFloor(star, forClone);
    }
    //Все открытые функции родительского класса определены. И есть доступ к массиву 
    public HotelFloor(int n){
        super(n);//создаем кол-во помещений на этаже
        star=DEFAULT_STARS;
    }
    public HotelFloor(Space ... enotherFloor){
        super(enotherFloor);
        star=DEFAULT_STARS;
    }
    public HotelFloor(int stars, Space ... enotherFloor){
        super(enotherFloor);
        star=stars;
    }
}
